;---------------< definicion de areas >--------------------------------------
ORG RAM
ADC_STATE RMB 1 ; esdado del conversor A/D
PATCH RMB 1 ; indica si el patch esta activado o no (sirve para que cuando esta activado no funcione el Anti-Poncho ni se desactive la RPT, etc)
OFS_TABLA RMB 2 ; variable de uso general utilizada para guardar addresses de memoria de 16 bits
VAR_0 RMB 1 ; variable de uso general
VAR_1 RMB 1 ; que pensas que puede ser NABO? (idem var_0)
INT_CHANGE RMB 1 ; sirve para saber cuando cambia de estado el clock de 100Hz
SUMNO RMB 3 ; se almacena aqui un numero de 6 cifras a sumar o restar
RESULTADO RMB 3 ; se almacena el resultado de una suma o resta
BUFFER RMB 1 ; variable utilizada por TIME_OUT para comprovar si la rpt cambio de estado (ej: TX/RX)
STATE_RPT RMB 1 ; variable utilizada por TIME_OUT para indicarle a el resto del programa el estado de la rpt. esto es: 1 = TX/ 0 = QAP
WAIT_TIME RMB 4 ; se utiliza para irlo decrementando cada 10ms y hacer una rutina de espera (lo utiliza WAIT e _IRQ)
PRESSED_KEY RMB 16 ; se almacena lo leido desde el teclado por TECLADO
ABORT_MODE RMB 1 ; aqui se almacena si el abort fue producido por un "*" o por un "#". esto se logra: ABORT=$0B (para "*") y ABORT=$0C (para "#"). en caso de trabajo normal en esta variable puede haber cualquier otro caracter sin problema.
STATE_00 RMB 1 ; en las variables STATE se almacena la informacion de las distintas funciones del uP (van de STATE_00 a STATE_99)
STATE_01 RMB 1
STATE_02 RMB 1
STATE_03 RMB 1
STATE_04 RMB 16
STATE_05 RMB 1
STATE_06 RMB 1
STATE_07 RMB 1
STATE_08 RMB 1
STATE_09 RMB 1
STATE_10 RMB 2
STATE_11 RMB 1
STATE_12 RMB 1
STATE_13 RMB 2
STATE_14 RMB 2
STATE_15 RMB 1
STATE_16 RMB 1 ; se almacena el password de acceso al DTMF ID
STATE_20 RMB 1
STATE_21 RMB 1 ; se almacena el password de acceso al S-Meter Teller
STATE_22 RMB 2 ; se almacena el tiempo del Squelch Tail
STATE_24 RMB 1 ; se almacena el tipo de rpt. 1 = Yaesu line of Rpt.'s/0 = Full Rpt. COR
STATE_28 RMB 1 ; 1 = Instant Mode ID enable/0 = Instant Mode S Teller enable
STATE_98 RMB 16 ; se almacena el password de acceso al patch
STATE_99 RMB 16 ; se almacena el password de acceso al sistema
STATE_99_BIS RMB 16 ; se almacena momentariamente el codigo de acceso (usado por rutina SUB_99/98 para validar el codigo, y en caso de haber un error, el uP deja el viejo codigo)
;---------------- inicializacion del STACK y variables --------------
LDS #FIN_RAM
LDU #STACK_U
;----------------- inicializacion de la PIA 6821 --------------------
CLR PIA_1 ;limpio el control register A
CLR PIA_3 ;limpio el control register B
LDA #%01011111
STA PIA_0 ;seteo el port A como output, menos PA5 y PA7
LDA #%11111111
STA PIA_2 ;seteo el port B como output
LDA #%00010101 ;seteo el control register A mas la interrupcion del clock de 100Hz, mas CA1 (el bit 1=1) que es la entrada del COR.
STA PIA_1
LDA #%00000100 ;seteo el control register B
STA PIA_3
;a partir de aca la PIA_0 es la direccion del portA
; la PIA_2 es la direccion del portB
; ---------------- SETEA LA INTERRUPCION DE CB2 (PTT) --------------
LDA #%00001100 ; pongo bit3 en 1 para activar el CB2 como interrupt input, active on rising edge
STA PIA_3
LDA PIA_2
; ---------------- SETEA LA INTERRUPCION DE CB1 (DTMF) -------------
LDA PIA_3
ORA #%00000010 ; pongo bit1 en 1 y bit0 en 0. queda el IRQ desactivado y el flag sube y baja con la entrada de CB1
STA PIA_3
LDA PIA_2
; ---------------- INICIALIZO VALORES DE VARIABLES (si se pide) ----
LDA PIA_0
ORA #%01000000 ; desabilito momentaneamente rpt.
STA PIA_0
ANDCC #ENABLE_IRQ
LDA #$00
STA PRESSED_KEY
LDX #0500
STX WAIT_TIME
LDA PIA_1
ORA #%00011100 ;seteo el control register A
STA PIA_1
LDA PIA_3
ORA #%00000011 ; hago que el cic9203 llame a interrupcion _IRQ
STA PIA_3
LDA PIA_2
WAIT_BOOT
LDA PRESSED_KEY ; no necesito ir a DTMF1_TECLADO, por que al ejecutarce un _IRQ, en el cual esta mandando datos el cic9203, la rutina los introduce en PRESSED_KEY.
CMPA #$0E
BEQ FULL_RESET ; si al encender sosengo oprimido la key B, entonces me inicializa nuevamente el equipo
LDD #$0000
CMPD WAIT_TIME
BNE WAIT_BOOT
LBRA NO_FULL_RESET
FULL_RESET ; aqui viene cuando realiza un BOOT-UP, pedido por SUB_23, por ejemplo
LDX #INITIAL_PASSWORD
LDY #STATE_99
LDB #16
JSR STRINGCOPY ; codigo de acceso
LDX #AUTOPATCH_PASSWORD
LDY #STATE_98
LDB #16
JSR STRINGCOPY ; codigo del AUTOPATCH
LDX #PAGER_PASSWORD
LDY #STATE_04
LDB #16
JSR STRINGCOPY ; codigo del PAGER
LDA #$08
STA STATE_16 ; codigo de acceso default al DTMF ID
LDA #$03
STA STATE_21 ; codigo de acceso default al S-Meter Teller
LDD #$4650 ; timpo entre ID's con rpt. QAP, es de 3 min (18000 clocks)
STD STATE_13
LDD #$2904 ; tiempo entre ID's al activar rpt, es de 1,25 min (10500 clocks)
STD STATE_14
LDD #$3A98 ; tiempo de anti-poncho (2,5 min/15000 clocks)
STD STATE_10
LDD #0100
STD STATE_22 ; tiempo de Squelch Tail
LDD #0050
STD STATE_26 ; tiempo max. del PTT de Instant Mode
LDD #0003
STD STATE_27 ; tiempo min. del PTT de Instant Mode
LDA #$01
STA STATE_00
STA STATE_05
STA STATE_09
STA STATE_11
STA STATE_12
STA STATE_15
STA STATE_20
STA STATE_24
LDA #$00
STA STATE_01
STA STATE_02
STA STATE_03
STA STATE_06
STA STATE_07
STA STATE_08
STA STATE_28
STA STATE_25
NO_FULL_RESET
LDA PIA_3
ANDA #%11111110 ; hago que el cic9203 no llame a interrupcion _IRQ
STA PIA_3
LDA PIA_2
LDA #$00
STA PATCH
;----------------- FIN DE INICIALIZACIONES --------------------------
LDA #$02
STA BUFFER ; para resetear el timer que este activado (ID o Anti-Poncho), esto se realiza al ir a TIME_OUT
LDD STATE_13
STD WAIT_TIME
JSR SAY_ID
START
LDA PIA_1
ORA #%00011100 ;seteo el control register A
STA PIA_1
JSR CHANGE_PIA
JSR PASS_SEL
DO
LDA PIA_1
ANDA #%11110111 ;seteo el control register A, (para que no funcione el time_out, esto es CA2 desactivada 100Hz)
STA PIA_1
LDA PIA_0
ORA #%01000000
STA PIA_0 ; desactivo momentariamente a la RPT, luego CHANGE_PIA me lo reactiva (o no) al ir a START (quedo claro no?)
LDB #02
JSR DTMF_TECLADO ; le pido que me lea 2 bytes del cic9203
LDA ABORT_MODE
CMPA #$0B
BEQ START
CMPA #$0C
BEQ DO ; checkeo los distintos tipos de abort's
JSR SUB_00
; JSR SUB_01
; JSR SUB_02
JSR SUB_03
JSR SUB_04
JSR SUB_05
JSR SUB_06
JSR SUB_07
JSR SUB_08
JSR SUB_09
JSR SUB_10
JSR SUB_11
JSR SUB_12
JSR SUB_13
JSR SUB_14
JSR SUB_15
JSR SUB_16
JSR SUB_17
JSR SUB_18
JSR SUB_19
JSR SUB_20
JSR SUB_21
JSR SUB_22
JSR SUB_23
JSR SUB_24
JSR SUB_25
JSR SUB_26
JSR SUB_27
JSR SUB_28
JSR SUB_98
JSR SUB_99
LDA ABORT_MODE
CMPA #$0B
LBEQ START ; si como resultado a alguna de las sub's se le entra una tecla de abort, entonces el sistema sale del "loop do"
; aqui se acumula la cantidad de caracteres leidos
LDY #PRESSED_KEY ; limpio el lugar donde debe ir el string de PRESSED_KEY
LDX #CLEAN_TEC
JSR STRINGCOPY
EXG X,Y ; dejo en "X" el address de PRESSED_KEY, para luego irlo incrementando
DIGIT_LOOP
LDA PIA_3
STA VAR_1 ; lo realizo, para que _IRQ pueda forzar una lectura de DTMF en el caso de que este en modo pager, y haya parado la reproducion
JSR TIME_OUT ; llamo a la rutina, para que checkee si se debe activar el anti-poncho
PSHS B
LDB PIA_0
ANDB #$80
CMPB #$80
PULS B
BNE SALIR ; si esperando la lectura del DTMF se llega a producir un disable de la rpt. (PA7=0), sale de la rutina poniendo a ABORT_MODE en $0B y PRESSED_KEY en $0B
LDA VAR_1
ANDA #$80
CMPA #$80
BNE DIGIT_LOOP ; checkeo si viene la interrupcion correcta (la del cic9203 obiamente, que mierda puedo estar esperando!!!)
LDA PIA_2 ; reseteo el irq de la pia mediante una lectura de la misma.
LDA DTMF_ADRS
ANDA #$0F ; solo tomo los 4 bits que utiliza el CIC9203 (por si las moscas)
STA ,X
LEAX 1,X
STA ABORT_MODE ; guardo el ultimo digito (que en caso de abort es el digio del tipo de abort, para que luego se sepa se volver a DO o a START)
CMPA #$0B ; "*"
BEQ END_DTMF
CMPA #$0C ; "#"
BEQ END_DTMF ; si el usuario oprime alguna de las dos teclas de abort "*" o "#", ejecuta el abort
DECB
CMPB #$00
BNE DIGIT_LOOP ; si llego a 0 "B", entonces me voy (ya que se supone que leyo la canidad de bytes que debia, en teoria!!!)
BEQ END_IRQ ; si es cero no le sigo restando, ya que daria la vuelta.
SUBD #01
STD WAIT_TIME
BRA END_IRQ
DTMF_IRQ
LDA PIA_2
ANDA #$02
CMPA #$00
BEQ READ_ON ; si no estaba reproduciendo audio, entonces es por que me llaman del BOOT (principio del programa), de lo contrario estoy reproduciendo audio, en modo pager, y la rpt. estaba desactivada. debo interrumpir la reproduccion.
LDA PIA_0
ANDA #$80
CMPA #$80
BNE END_IRQ ; si la rpt. no es peteteada, aunque entre un DTMF no le doy bola
STX OFS_TABLA ; lo realizo para interrumpir la repro.
LDA #$80
STA VAR_1 ; lo realizo para que PASS_PAGER me lea este digito del DTMF que acaba de interrumpir la repro.
BRA END_IRQ
READ_ON
JSR DTMF1_TECLADO
BRA END_IRQ
; ------------------------ TIPOS DE SALIDAS ------------------------
END_IRQ
LDA PIA_0
LDA PIA_2
RTI
; end ---------------------------------------------------------------
BNE MODE_20 ; si no esta en modo PAGER, no ejecuto la rutina PASS_PAGER
JSR PASS_PAGER
MODE_20
LDB #$01
JSR DTMF_TECLADO
LDA PRESSED_KEY
CMPA #$0F
BEQ CODE_1 ; si es "C" va a ejecutar a PASS_CONTROL
LDB STATE_00
CMPB #$00
BEQ DONT_WORK ; si la RPT esta fuera de funcionamiento, entonces solo le doy bola al cambio de parametros
CMPA #$0D
BEQ CODE_2 ; si es "A" va a ejecutar a PASS_PATCH
CMPA STATE_16
BEQ CODE_3 ; si es el codigo de la ID de la rpt, va a ejecutar a SAY_ID (siempre que STATE_15=1)
CMPA STATE_21
BEQ CODE_4 ; si es el codigo del S-Meter Teller va a ejecutar a S_TELLER (siempre que STATE_20=1)
DONT_WORK
LDA STATE_RPT
CMPA #$01
BEQ MODE_20 ; si la rpt. no fue desactivada, siguo viendo si me piden hacer algo mas. por el contrario, si la rpt. se desactivo, voy a PASS_PAGER, para ver si cuando se vuelve a activar
BRA SEL_LOOP
CODE_1
JSR PASS_CONTROL
LDA PRESSED_KEY
CMPA #$0B
BEQ MODE_20
CMPA #$0C
BEQ MODE_20 ; si pone # o * comienzo todo de nuevo
BRA END_SEL ; si entro correctamente el codigo de acceso, sigo adelante, para que el usuario pueda cambiar los parametros
CODE_2
LDA STATE_05
CMPA #$01
BNE MODE_20 ; si no esta permitido activar el patch salgo
JSR PASS_PATCH
LDA ABORT_MODE
CMPA #$0B
BEQ MODE_20
CMPA #$0C
BEQ MODE_20 ; si pone # o * comienzo todo de nuevo
LDA PIA_2
ORA #$03 ; indica que accione el patch y mantenga a la RPT en transmicion (en RPT Yaesu)
STA PIA_2 ; si entro correctamente el codigo de acceso, acciono el PATCH
LDA #$01
STA PATCH ; aviso al resto del sistema que el patch esta activado
PATCH_LOOP
LDB #$01
JSR DTMF_TECLADO
LDA PRESSED_KEY
CMPA #$0C
BEQ MODE_21 ; si oprimo # salgo del modo patch y lo desactivo
LDA STATE_03
CMPA #$01
BNE PATCH_LOOP ; si no estoy en modo pager vuelvo a PATCH_LOOP a leer otro digito del DTMF
LDA STATE_RPT
CMPA #$01
BEQ PATCH_LOOP ; si estoy en modo pager, pero no se desactivo la rpt. voy a PATCH_LOOP a leer otro digito del DTMF
JSR PASS_PAGER ; si se desactivo la rpt. entonces voy a leer nuevamente el codigo del pager
BRA PATCH_LOOP
MODE_21
LDA PIA_2
ANDA #%11111100 ; indica que desaccione el patch
STA PIA_2 ; desacciono el modo patch
LDA #$00
STA PATCH ; salgo del modo patch
LDD STATE_10
STD WAIT_TIME ; reinicializo el timer
LBRA MODE_20 ; luego comienzo todo de nuevo
CODE_3
LDA STATE_15
CMPA #$01
LBNE MODE_20
JSR SAY_ID
LBRA MODE_20
CODE_4
LDA STATE_20
CMPA #$01
LBNE MODE_20
JSR S_TELLER
LBRA MODE_20
END_SEL
PULS A,B,X,Y
RTS
; end ---------------------------------------------------------------
BEQ PASS1_PAGER ; si pone # o * salgo y por lo tanto vuelvo a PASS_SEL
CMPA ,Y
BNE PASS1_PAGER
LEAY 1,Y
LDA ,Y
CMPA #$0C ; cuando aparece un "#" ($0C) quiere decir que termino el codigo de acceso
BNE PASS2_PAGER
LDA STATE_00
CMPA #$01
BNE END_PAGER ; si esta en modo disable STATE_00=1, no activa la rpt.
CHECK_END ; checkeo que haya sesado el ultimo tono DTMF, antes de activar la rpt.
LDA PIA_0
ANDA #%00100000
CMPA #%00100000
BEQ CHECK_END ; mientras el ulitmo tono no termine, sigo esperando
LDA PIA_0 ; activo momentariamente a la rpt. luego lo desactiva _IRQ, si se desactiva la rpt.
ANDA #%10111111
STA PIA_0
LDA #$01
STA STATE_RPT ; me pongo en modo rpt. activate, ya que es la verdad y a mi no me gusta mentir!!! (ademas no lo puedo hacer despues, ya que en modo pager la rutina SAY_ID debe saber el estado de la rpt para parar la repro o no.
; ---------------------- manejo STATE_14 en modo pager ------
LDA STATE_12
CMPA #$01
BNE NO1_SAY ; si esta desactivado el phone-id, se calla la boca
LDD STATE_14
CMPD STATE_13 ;#$0000
BEQ NO1_SAY ; si el valor es cero, debe quedar desactivado
LDD WAIT_TIME
CMPD STATE_14
BHI NO1_SAY
JSR SAY_ID ; si se activa la rpt. despues de xxxx seg. la identifica, y luego comienza a contar el antiponcho
NO1_SAY
; ------------------ fin manejo STATE_14 en modo pager ------
LDD STATE_10
STD WAIT_TIME ; comienzo nuevamente a contar el timer del anti-poncho
END_PAGER
PULS A,B,X,Y
RTS
; end ---------------------------------------------------------------
; Ver si cambio de estado (TX a QAP o viceversa) y accionar en base a ello
LDA PIA_0
ANDA #$80
CMPA BUFFER
LBEQ END_TIME
STA BUFFER
CMPA #$00
BEQ ID_CHECK
JSR CHANGE_PIA ; lo llamo para que si se desactivo la rpt por anti-poncho, ahora la reactive
LDA STATE_03
CMPA #$01
LBEQ END_TIME ; si esta el pager activado, entonces se maneja todo desde PASS_PAGER, no desde aqui.
LDA PATCH
CMPA #$01
BEQ NO_SAY ; si el patch esta andando, entonces no debe haber anti-poncho, etc
LDA STATE_12
CMPA #$01
BNE NO_SAY ; si esta desactivado el phone-id, se calla la boca
LDD STATE_14
CMPD STATE_13 ;#$0000
BEQ NO_SAY ; si el valor es cero, debe quedar desactivado
LDD WAIT_TIME
CMPD STATE_14
BHI NO_SAY
JSR SAY_ID ; si se activa la rpt. despues de xxxx seg. la identifica, y luego comienza a contar el antiponcho
NO_SAY
LDX STATE_10 ; inicializo el tiempo del anti-ponchus
STX WAIT_TIME
LDA #$01
STA STATE_RPT
LBRA END_TIME
ID_CHECK
LDA STATE_25
CMPA #$00
BEQ CHECK_GOON ; si esta desactivado el Instant Mode, sigo la rutina sin detenerme a analizar
LDA STATE_00
CMPA #$00
BEQ CHECK_GOON ; si esta fuera de funcionamiento la RPT, entonces no debe funcionar el Instant Mode
LDD STATE_10
SUBD STATE_26
CMPD WAIT_TIME
BHI CHECK_GOON ; si la rpt. estuvo encendida mas que el tiempo maximo de Instant Mode, sigue y no lo ejecuta
LDD STATE_10
SUBD STATE_27
CMPD WAIT_TIME
BLS CHECK_GOON ; si el pulso de PTT no puede ser menor que state_27, no ejecuto Instant Mode (ya que indica que acabo de salir de reproducir algo, o que es un ruido muy corto, etc.)
LDA STATE_28
CMPA #$00
BEQ TYPE_0
; ejecuto un SAY_ID
JSR SAY_ID
BRA CHECK_GOON
TYPE_0 ; ejecuto un S_Teller
JSR S_TELLER
CHECK_GOON
LDX WAIT_TIME
LDD STATE_22
STD WAIT_TIME
ID_TAIL
LDA PIA_0
ANDA #$80
CMPA #$80
BNE TAIL_OUT ; si se reactiva la rpt. dentro de este tiempo llamo a PONCH_CHECK, para que carge el timer y los datos correspondientes
STX WAIT_TIME ; reestablezo el timer
STA BUFFER
BRA END_TIME
TAIL_OUT
LDD WAIT_TIME
CMPD #$0000
BNE ID_TAIL
STX WAIT_TIME ; reestablezo el timer
LDA STATE_03
CMPA #$01
BEQ DIS ; si no esta el pager activado, no desactivo la rpt.
LDA STATE_24
CMPA #$00
BEQ DIS ; si la rpt. esta en modo "No Yaesu" (modo COR), entonces debe desactivar la RPT
BRA SEG_ID
DIS
LDA PATCH
CMPA #$01
BEQ SEG_ID ; si el patch esta en uso, entonces no desactivo la RPT
LDA PIA_0
ORA #%01000000
STA PIA_0 ; desactivo momentariamente a la RPT, luego CHANGE_PIA me lo reactiva (o no) al ir a START (quedo claro no?)
SEG_ID
LDA STATE_RPT
CMPA #$00
BEQ END_TIME
LDX STATE_13 ; inicializo el tiempo del ID, siempre y cuando la STATE_RPT=1 , ya que sino no inicializo nuevamente el timer (esto se puede dar solamente en el modo pager, cuando desaprece una portadora que no mando el codigo del pager).
LBNE END_TIME_OUT ; si no es igual a cero, me voy ya que no debe ejecutar ni anti-poncho ni ID
LDA STATE_RPT
CMPA #$00
BEQ ID_OUT ; si se desactivo la rpt voy a ver si debo mandar el ID
LDA STATE_09
CMPA #$01
BNE END_TIME_OUT ; checkeo si esta activado o no el anti-poncho
LDA STATE_00
CMPA #$01
BNE END_TIME_OUT ; checkeo que la repetidora no este desactivada por un deseo del usuario
LDA PATCH
CMPA #$01
BEQ END_TIME_OUT ; si esta el patch funcionando, etonces no debe funcionar el anti-poncho
LDA PIA_0
ANDA #$40
CMPA #$40
BEQ END_TIME_OUT ; si ya estaba desactivada, es porque ya la desactive, por lo tanto no debo volver a desactivarla, ni volver a decir el mensaje de anti-poncho.
LDA PIA_0
ORA #%01000000 ; desactivo momentaneamente la rpt.
STA PIA_0
LDA STATE_11
CMPA #$01
BNE NO_PONCHO ; si no esta activado el mensaje en phone de anti-poncho, me voy
LDX #AUD1_PONCHO
LDD #AUD2_PONCHO
STD OFS_TABLA
ORCC #ENMASK_IRQ ; deshabilito las interrupciones, ya que sino aletrarian la ecualizacion de la rutina
JSR REPRO ; aviso en "Phone" (guarda que concheto!) que se apaga la repe y a joderse por boludo
ANDCC #ENABLE_IRQ ; habilito nuevamente las interrupciones
LDA PIA_0
ORA #$40
STA PIA_0
BUG
LDA PIA_0
ANDA #$80
CMPA #$00
BNE BUG
NO_PONCHO
BRA END_TIME_OUT
ID_OUT
LDA PATCH
CMPA #$01
BEQ END_TIME_OUT ; si esta funcionando el patch, entonces no debe andar el ID de la RPT
LDA STATE_12
CMPA #$01
BNE END_TIME_OUT ; checkeo si esta activado o no el anti-poncho
JSR SAY_ID ; ejecuto la identificacion
LDA STATE_24
CMPA #$01
BEQ TX_OFF
LDA PIA_0
ORA #$40
STA PIA_0
TX_OFF
LDD STATE_13
STD WAIT_TIME ; cargo el tiempo para la proxima ID
END_TIME_OUT
PULS A,B,X,Y
RTS
; end ---------------------------------------------------------------
ANDA #%11110111 ; seteo el control register A, para desactivar el IRQ de 100Hz
STA PIA_1
LDA STATE_03
CMPA #$01
BNE JUST_REPRO ; si no esta en modo pager, no tengo por que parar la reproduccion, por lo tanto voy derecho a reproducir
LDA STATE_RPT
CMPA #$01
BEQ JUST_REPRO ; si la rpt. ya esta activada, entonces no tengo por que parar la reproduccion para checkear el codigo del pager (ya que el codigo ya fue checkeado anteriormente)
LDA PIA_2
ORA #%00000010
STA PIA_2
LDA PIA_2
LDA PIA_3
ORA #%00000011 ; hago que el cic9203 llame a interrupcion _IRQ, de modo que s mientras reproduce el ID, la rpt. se activa, entonces paro de reproducir el audio, para pasar a estar atento hacerca del codigo de pager entrado.
STA PIA_3
JUST_REPRO
JSR REPRO
LDA PIA_3
ANDA #%11111110 ; hago que el cic9203 no llame a interrupcion _IRQ
STA PIA_3
LDA PIA_0
LDA PIA_1
ORA #%00011100 ; seteo el control register A, para activar IRQ de 100Hz
STA PIA_1
PULS A,B,X,Y
RTS
; end ---------------------------------------------------------------
BEQ END_SUB_00 ; checkeo si eligieron esta funcion o no
LDB #$01
JSR DTMF_TECLADO
LDA ABORT_MODE
CMPA #$0C
BEQ END_SUB_00
CMPA #$0B
BEQ END_SUB_00
JSR CONVERT
LDA PRESSED_KEY
JSR OUT ; para que no se active ninguna otra sub
CMPA #$01
BHI END_SUB_00 ; checkeo que la variable este entre 0 y 1, sino me voy
STA STATE_00
LDD STATE_10
STD WAIT_TIME ; inicializo el timer, por lo tanto si activo el Anti-Poncho luego de un timepo de que la RPT este activada, no la desactiva por Anti-Poncho
END_SUB_00
PULS A,B,X,Y
RTS
; end ---------------------------------------------------------------
BEQ END_SUB_03 ; checkeo si eligieron esta funcion o no
LDB #$01
JSR DTMF_TECLADO
LDA ABORT_MODE
CMPA #$0C
BEQ END_SUB_03
CMPA #$0B
BEQ END_SUB_03
JSR CONVERT
LDA PRESSED_KEY
JSR OUT ; para que no se active ninguna otra sub
CMPA #$01
BHI END_SUB_03 ; checkeo que la variable este entre 0 y 1, sino me voy
STA STATE_03
LDD STATE_13
STD WAIT_TIME ; inicializo el timer de RPT en modo disable (ya que al salir del modo chang values el usuario debe mandar el codio del pager para activar la RPT)
END_SUB_03
PULS A,B,X,Y
RTS
; end ---------------------------------------------------------------
BEQ END_SUB_09 ; checkeo si eligieron esta funcion o no
LDB #$01
JSR DTMF_TECLADO
LDA ABORT_MODE
CMPA #$0C
BEQ END_SUB_09
CMPA #$0B
BEQ END_SUB_09
JSR CONVERT
LDA PRESSED_KEY
JSR OUT ; para que no se active ninguna otra sub
CMPA #$01
BHI END_SUB_09 ; checkeo que la variable este entre 0 y 1, sino me voy
STA STATE_09
LDD STATE_10
STD WAIT_TIME ; inicializo el timer, por lo tanto si activo el Anti-Poncho luego de un timepo de que la RPT este activada, no la desactiva por Anti-Poncho
END_SUB_09
PULS A,B,X,Y
RTS
; end ---------------------------------------------------------------